#include "common.h"

#ifndef BLOCK_SIZE
	#define BLOCK_SIZE 1024
#endif

__global__ void cache_kernel_1 (int nThreads, int* out, int* chase)
{
	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;
	__syncthreads ();

	if(tid < nThreads) {
		// read from smem (pointer chasing)
		tmp = s[tmp];
		out[tid] = tmp;
	}
}

__global__ void cache_kernel_2 (int nThreads, int* out, int* chase)
{
	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;

	if(tid < nThreads) {
		// read from smem (pointer chasing)
		tmp = s[tmp];
		tmp = s[tmp];
		out[tid] = tmp;
	}
}

__global__ void cache_kernel_4 (int nThreads, int* out, int* chase)
{
	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;

	if(tid < nThreads) {
		// read from smem (pointer chasing)
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		out[tid] = tmp;
	}
}

__global__ void cache_kernel_8 (int nThreads, int* out, int* chase)
{
	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;

	if(tid < nThreads) {
		// read from smem (pointer chasing)
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		out[tid] = tmp;
	}
}


__global__ void cache_kernel_16 (int nThreads, int* out, int* chase)
{
	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;

	if(tid < nThreads) {
		// read from smem (pointer chasing)
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		out[tid] = tmp;
	}

}


__global__ void cache_kernel_32 (int nThreads, int* out, int* chase)
{
	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;

	if(tid < nThreads) {
		// read from smem (pointer chasing)
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		out[tid] = tmp;
	}

}

__global__ void cache_kernel_64 (int nThreads, int* out, int* chase)
{
	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;

	if(tid < nThreads) {
		// read from smem (pointer chasing)
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		out[tid] = tmp;
	}

}


__global__ void cache_kernel_128 (int nThreads, int* out, int* chase)
{
	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;

	if(tid < nThreads) {
		// read from smem (pointer chasing)
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		out[tid] = tmp;
	}

}


__global__ void cache_kernel_256 (int nThreads, int* out, int* chase)
{
	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;

	if(tid < nThreads) {
		// read from smem (pointer chasing)
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		out[tid] = tmp;
	}

}

__global__ void cache_kernel_512 (int nThreads, int* out, int* chase)
{
	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;

	if(tid < nThreads) {
		// read from smem (pointer chasing)
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		out[tid] = tmp;
	}

}


__global__ void cache_kernel_1024 (int nThreads, int* out, int* chase)
{
	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;

	if(tid < nThreads) {
		// read from smem (pointer chasing)
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		out[tid] = tmp;
	}
}


__global__ void cache_kernel_2048 (int nThreads, int* out, int* chase)
{

	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;

	if(tid < nThreads) {
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		// read from smem (pointer chasing)
		/*
		#pragma unroll 2048
		for(int i = 0; i < 2048; i++) {
			tmp = s[tmp];
		}
		 */
		out[tid] = tmp;
	}
}


__global__ void cache_kernel_4096 (int nThreads, int* out, int* chase)
{
	int tmp;
	uint tid = threadIdx.x + blockIdx.x * blockDim.x;
	__shared__ int s[BLOCK_SIZE];

	// read from DRAM and write to SMem
	tmp = chase[threadIdx.x];
	s[threadIdx.x] = tmp;
	__syncthreads ();

	if(tid < nThreads) {
		/*
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		tmp = s[tmp];
		 */
		// read from smem (pointer chasing)
		#pragma unroll 2048
		for(int i = 0; i < 4096; i++) {
			tmp = s[tmp];
		}
		out[tid] = tmp;
	}
}


